/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */

// 判断一个二叉树的值是否相同,简称相同二叉树
// 我们应该这么写这道题目呢?
// 思路如下: 
// 如果想检查二叉树的值,那我们就要遍历了
// 我们遍历的时候,根据我们的目的,设置我们的退出递归的条件
// 这样的话,我们就可以分析出了退出循环的两种情况了: 
// 1.每次的值都是相同,然后向下遍历直到遍历到NULL,表明该单条上所有节点的节点的值都是相同的
// 2.遇到了某节点和下一个节点的值是不同的情况,这时候就直接表明该树是一个非相同二叉树了,就可以直接退出递归
// 分成这两种情况,同时也是表示两种不同的结果: 是相同二叉树,不算相同二叉树
// 那这样的话,我们可以在这两个判断条件其中一个成立的时候返回一个值表明状态,那这个时候用布尔类型就很方便了惹
// 当然,在最后我们需要把函数接收到的值传出去,所以需要再return一次

bool isUnivalTree(struct TreeNode* root) 
{


// 判断的两种状态

    if (root == NULL)
    {

        return true ;

    }

    if (root -> left && root -> val != root -> left -> val)
    {

        return false ;

    }

    if (root -> right && root -> val != root -> right -> val)
    {

        return false ;
        
    }

    return isUnivalTree (root -> left) && isUnivalTree (root -> right) ;
    
}